package com.squid.cloud.common.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import com.alibaba.fastjson.JSON;

public class JsonUtils {

    /**
     * 采用fastjson方式，速度较快
     * @param jsonStr
	 * @param  clazz
     * @return
     */
	public static <T> T jsonToObject(String jsonStr, Class<T> clazz) {
        return JSON.parseObject(jsonStr, clazz);
    }

	public static <T> T jsonToObject(String jsonStr, Type type) {
		return JSON.parseObject(jsonStr, type);
	}

	/**
	 * 带泛型的处理
	 * @param jsonStr
	 * @param type
	 * @return
	 */
	public static <T> T jsonToGenericity(String jsonStr, JsonTypeToken<T> type) {
        return jsonToObject(jsonStr, type.getType());
    }

    /**
     * 采用gson方式转换，gson考虑更全面，有特定输出规则
     * @param obj
     * @return
     */
    public static String objectToJson(Object obj) {
    	return JSON.toJSONString(obj);
    }

    /**
     * 定义泛型解析
     * @author yuzhou
     *
     * @param <T>
     */
    public static class JsonTypeToken<T>{
    	private final Type type;

        protected JsonTypeToken(){
            Type superClass = getClass().getGenericSuperclass();

            type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
        }

        public Type getType() {
            return type;
        }
    }
    
}
